#!/usr/bin/python3
#coding=utf-8
import time
import re
import csv
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

import pinyin

def get_pinyin_ufc(cnstr):
    return pinyin.get_initial(cnstr, delimiter="").upper()
 
def create_browser():
    chrome_opt = Options()  # 创建参数设置对象.
    chrome_opt.add_argument('--headless')  # 无界面化.
    chrome_opt.add_argument('--disable-gpu')  # 配合上面的无界面化.
    chrome_opt.add_argument('--window-size=1366,768')  # 设置窗口大小, 窗口大小会有$
    chrome_opt.add_argument("--no-sandbox") #使用沙盒模式运行
    # 创建Chrome对象并传入设置信息.
    return webdriver.Chrome(options=chrome_opt)

def append_data(rows):
    """
    'r'：读
    'w'：写
    'a'：追加
    'r+' == r+w（可读可写，文件若不存在就报错(IOError)）
    'w+' == w+r（可读可写，文件若不存在就创建）
    'a+' ==a+r（可追加可写，文件若不存在就创建）
    对应的，如果是二进制文件，就都加一个b就好啦：
    'rb'　　'wb'　　'ab'　　'rb+'　　'wb+'　　'ab+'
    """
    f = open('icd-10.csv','a+')
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)
    f.close()

if __name__ == '__main__':
    browser = create_browser()
    #browser.maximize_window()
    
    # 要记录中断位置，下次启动继续爬取
    
    for i in range(65,91):
        for j in range(0,101):
            code = chr(i)+ str(j).rjust(2,'0')
            url = "https://www.medsci.cn/sci/icd-10.do?q="+code+"&classtype=ICD-10%E7%96%BE%E7%97%85%E7%BC%96%E7%A0%81"
            browser.get(url)
            
            total_el = browser.find_element(By.CSS_SELECTOR, "body > div.boxed > div.content > div > div > div > div.journal-list-header > div > span")
            #'^共查询到(\d+)条结果$'
            matched = re.match(r'^共查询到(\d+)条结果$', total_el.text)
            if matched and matched.group(1)==0:
                print(code+'：没有内容，搜索下一个')
                break
                
            rows = browser.find_elements(By.XPATH, "/html/body/div[1]/div[3]/div/div/div/div[2]/table/tbody/tr")
            data = []
            for row in rows:
                #dup = (col.text for col in row.find_elements(By.TAG_NAME,"td"))
                #data.append(dup)
                cols = row.find_elements(By.TAG_NAME,"td")
                data.append((cols[0].text,cols[1].text,get_pinyin_ufc(cols[0].text)))
            append_data(data)
            print(code+"：抓取完成")
            time.sleep(2)
    
    #打印内容，保存截图
    """
    print(browser.page_source)
    pic_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
    browser.save_screenshot("./screenshot"+pic_time+".png")
    """
    print("全部抓取完成")
    browser.quit()
    